// $ANTLR 3.4 /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g 2011-10-19 23:34:24

	package br.edu.ifrn.potigol;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings({"all", "warnings", "unchecked"})
public class PotigolParser extends Parser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "CAIXAALTA", "ESPACO", "IDENTIFICADOR", "INTEIRO", "'!='", "'&&'", "'('", "')'", "'*'", "'+'", "','", "'-'", "'/'", "'<'", "'<='", "'='", "'=='", "'>'", "'>='", "'constante'", "'int'", "'mod'", "'not'", "'programa'", "'val'", "'{'", "'||'", "'}'"
    };

    public static final int EOF=-1;
    public static final int T__8=8;
    public static final int T__9=9;
    public static final int T__10=10;
    public static final int T__11=11;
    public static final int T__12=12;
    public static final int T__13=13;
    public static final int T__14=14;
    public static final int T__15=15;
    public static final int T__16=16;
    public static final int T__17=17;
    public static final int T__18=18;
    public static final int T__19=19;
    public static final int T__20=20;
    public static final int T__21=21;
    public static final int T__22=22;
    public static final int T__23=23;
    public static final int T__24=24;
    public static final int T__25=25;
    public static final int T__26=26;
    public static final int T__27=27;
    public static final int T__28=28;
    public static final int T__29=29;
    public static final int T__30=30;
    public static final int T__31=31;
    public static final int CAIXAALTA=4;
    public static final int ESPACO=5;
    public static final int IDENTIFICADOR=6;
    public static final int INTEIRO=7;

    // delegates
    public Parser[] getDelegates() {
        return new Parser[] {};
    }

    // delegators


    public PotigolParser(TokenStream input) {
        this(input, new RecognizerSharedState());
    }
    public PotigolParser(TokenStream input, RecognizerSharedState state) {
        super(input, state);
    }

    public String[] getTokenNames() { return PotigolParser.tokenNames; }
    public String getGrammarFileName() { return "/Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g"; }



    // $ANTLR start "programa"
    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:15:1: programa : 'programa' IDENTIFICADOR '{' ( constante | variavel | atribuicao )* '}' ;
    public final void programa() throws RecognitionException {
        try {
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:15:9: ( 'programa' IDENTIFICADOR '{' ( constante | variavel | atribuicao )* '}' )
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:16:2: 'programa' IDENTIFICADOR '{' ( constante | variavel | atribuicao )* '}'
            {
            match(input,27,FOLLOW_27_in_programa39); 

            match(input,IDENTIFICADOR,FOLLOW_IDENTIFICADOR_in_programa41); 

            match(input,29,FOLLOW_29_in_programa43); 

            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:17:3: ( constante | variavel | atribuicao )*
            loop1:
            do {
                int alt1=4;
                switch ( input.LA(1) ) {
                case 23:
                    {
                    alt1=1;
                    }
                    break;
                case 28:
                    {
                    alt1=2;
                    }
                    break;
                case IDENTIFICADOR:
                    {
                    alt1=3;
                    }
                    break;

                }

                switch (alt1) {
            	case 1 :
            	    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:17:4: constante
            	    {
            	    pushFollow(FOLLOW_constante_in_programa48);
            	    constante();

            	    state._fsp--;


            	    }
            	    break;
            	case 2 :
            	    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:17:16: variavel
            	    {
            	    pushFollow(FOLLOW_variavel_in_programa52);
            	    variavel();

            	    state._fsp--;


            	    }
            	    break;
            	case 3 :
            	    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:17:27: atribuicao
            	    {
            	    pushFollow(FOLLOW_atribuicao_in_programa56);
            	    atribuicao();

            	    state._fsp--;


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            match(input,31,FOLLOW_31_in_programa61); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "programa"



    // $ANTLR start "tipo"
    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:21:1: tipo : 'int' ;
    public final void tipo() throws RecognitionException {
        try {
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:21:5: ( 'int' )
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:22:2: 'int'
            {
            match(input,24,FOLLOW_24_in_tipo70); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "tipo"



    // $ANTLR start "constante"
    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:25:1: constante : 'constante' tipo CAIXAALTA '=' expressao ;
    public final void constante() throws RecognitionException {
        try {
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:25:10: ( 'constante' tipo CAIXAALTA '=' expressao )
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:26:2: 'constante' tipo CAIXAALTA '=' expressao
            {
            match(input,23,FOLLOW_23_in_constante79); 

            pushFollow(FOLLOW_tipo_in_constante81);
            tipo();

            state._fsp--;


            match(input,CAIXAALTA,FOLLOW_CAIXAALTA_in_constante83); 

            match(input,19,FOLLOW_19_in_constante85); 

            pushFollow(FOLLOW_expressao_in_constante87);
            expressao();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "constante"



    // $ANTLR start "variavel"
    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:29:1: variavel : 'val' tipo IDENTIFICADOR ( ',' IDENTIFICADOR )* ( '=' expressao )? ;
    public final void variavel() throws RecognitionException {
        try {
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:29:9: ( 'val' tipo IDENTIFICADOR ( ',' IDENTIFICADOR )* ( '=' expressao )? )
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:30:2: 'val' tipo IDENTIFICADOR ( ',' IDENTIFICADOR )* ( '=' expressao )?
            {
            match(input,28,FOLLOW_28_in_variavel96); 

            pushFollow(FOLLOW_tipo_in_variavel98);
            tipo();

            state._fsp--;


            match(input,IDENTIFICADOR,FOLLOW_IDENTIFICADOR_in_variavel100); 

            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:30:27: ( ',' IDENTIFICADOR )*
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

                if ( (LA2_0==14) ) {
                    alt2=1;
                }


                switch (alt2) {
            	case 1 :
            	    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:30:28: ',' IDENTIFICADOR
            	    {
            	    match(input,14,FOLLOW_14_in_variavel103); 

            	    match(input,IDENTIFICADOR,FOLLOW_IDENTIFICADOR_in_variavel105); 

            	    }
            	    break;

            	default :
            	    break loop2;
                }
            } while (true);


            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:30:48: ( '=' expressao )?
            int alt3=2;
            int LA3_0 = input.LA(1);

            if ( (LA3_0==19) ) {
                alt3=1;
            }
            switch (alt3) {
                case 1 :
                    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:30:49: '=' expressao
                    {
                    match(input,19,FOLLOW_19_in_variavel110); 

                    pushFollow(FOLLOW_expressao_in_variavel112);
                    expressao();

                    state._fsp--;


                    }
                    break;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "variavel"



    // $ANTLR start "atribuicao"
    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:33:1: atribuicao : IDENTIFICADOR '=' expressao ;
    public final void atribuicao() throws RecognitionException {
        try {
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:33:11: ( IDENTIFICADOR '=' expressao )
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:34:2: IDENTIFICADOR '=' expressao
            {
            match(input,IDENTIFICADOR,FOLLOW_IDENTIFICADOR_in_atribuicao123); 

            match(input,19,FOLLOW_19_in_atribuicao125); 

            pushFollow(FOLLOW_expressao_in_atribuicao127);
            expressao();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "atribuicao"



    // $ANTLR start "termo"
    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:37:1: termo : ( IDENTIFICADOR | '(' expressao ')' | INTEIRO );
    public final void termo() throws RecognitionException {
        try {
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:37:6: ( IDENTIFICADOR | '(' expressao ')' | INTEIRO )
            int alt4=3;
            switch ( input.LA(1) ) {
            case IDENTIFICADOR:
                {
                alt4=1;
                }
                break;
            case 10:
                {
                alt4=2;
                }
                break;
            case INTEIRO:
                {
                alt4=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 4, 0, input);

                throw nvae;

            }

            switch (alt4) {
                case 1 :
                    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:38:2: IDENTIFICADOR
                    {
                    match(input,IDENTIFICADOR,FOLLOW_IDENTIFICADOR_in_termo136); 

                    }
                    break;
                case 2 :
                    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:38:18: '(' expressao ')'
                    {
                    match(input,10,FOLLOW_10_in_termo140); 

                    pushFollow(FOLLOW_expressao_in_termo142);
                    expressao();

                    state._fsp--;


                    match(input,11,FOLLOW_11_in_termo144); 

                    }
                    break;
                case 3 :
                    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:38:38: INTEIRO
                    {
                    match(input,INTEIRO,FOLLOW_INTEIRO_in_termo148); 

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "termo"



    // $ANTLR start "negacao"
    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:41:1: negacao : ( 'not' )* termo ;
    public final void negacao() throws RecognitionException {
        try {
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:41:8: ( ( 'not' )* termo )
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:42:2: ( 'not' )* termo
            {
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:42:2: ( 'not' )*
            loop5:
            do {
                int alt5=2;
                int LA5_0 = input.LA(1);

                if ( (LA5_0==26) ) {
                    alt5=1;
                }


                switch (alt5) {
            	case 1 :
            	    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:42:2: 'not'
            	    {
            	    match(input,26,FOLLOW_26_in_negacao157); 

            	    }
            	    break;

            	default :
            	    break loop5;
                }
            } while (true);


            pushFollow(FOLLOW_termo_in_negacao160);
            termo();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "negacao"



    // $ANTLR start "unario"
    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:45:1: unario : ( '+' | '-' )* negacao ;
    public final void unario() throws RecognitionException {
        try {
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:45:7: ( ( '+' | '-' )* negacao )
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:46:2: ( '+' | '-' )* negacao
            {
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:46:2: ( '+' | '-' )*
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( (LA6_0==13||LA6_0==15) ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:
            	    {
            	    if ( input.LA(1)==13||input.LA(1)==15 ) {
            	        input.consume();
            	        state.errorRecovery=false;
            	    }
            	    else {
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        throw mse;
            	    }


            	    }
            	    break;

            	default :
            	    break loop6;
                }
            } while (true);


            pushFollow(FOLLOW_negacao_in_unario178);
            negacao();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "unario"



    // $ANTLR start "multiplicacao"
    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:49:1: multiplicacao : unario ( ( '*' | '/' | 'mod' ) unario )* ;
    public final void multiplicacao() throws RecognitionException {
        try {
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:49:14: ( unario ( ( '*' | '/' | 'mod' ) unario )* )
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:50:2: unario ( ( '*' | '/' | 'mod' ) unario )*
            {
            pushFollow(FOLLOW_unario_in_multiplicacao187);
            unario();

            state._fsp--;


            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:50:9: ( ( '*' | '/' | 'mod' ) unario )*
            loop7:
            do {
                int alt7=2;
                int LA7_0 = input.LA(1);

                if ( (LA7_0==12||LA7_0==16||LA7_0==25) ) {
                    alt7=1;
                }


                switch (alt7) {
            	case 1 :
            	    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:50:10: ( '*' | '/' | 'mod' ) unario
            	    {
            	    if ( input.LA(1)==12||input.LA(1)==16||input.LA(1)==25 ) {
            	        input.consume();
            	        state.errorRecovery=false;
            	    }
            	    else {
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        throw mse;
            	    }


            	    pushFollow(FOLLOW_unario_in_multiplicacao202);
            	    unario();

            	    state._fsp--;


            	    }
            	    break;

            	default :
            	    break loop7;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "multiplicacao"



    // $ANTLR start "adicao"
    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:53:1: adicao : multiplicacao ( ( '+' | '-' ) multiplicacao )* ;
    public final void adicao() throws RecognitionException {
        try {
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:53:7: ( multiplicacao ( ( '+' | '-' ) multiplicacao )* )
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:54:2: multiplicacao ( ( '+' | '-' ) multiplicacao )*
            {
            pushFollow(FOLLOW_multiplicacao_in_adicao213);
            multiplicacao();

            state._fsp--;


            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:54:16: ( ( '+' | '-' ) multiplicacao )*
            loop8:
            do {
                int alt8=2;
                int LA8_0 = input.LA(1);

                if ( (LA8_0==13||LA8_0==15) ) {
                    alt8=1;
                }


                switch (alt8) {
            	case 1 :
            	    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:54:17: ( '+' | '-' ) multiplicacao
            	    {
            	    if ( input.LA(1)==13||input.LA(1)==15 ) {
            	        input.consume();
            	        state.errorRecovery=false;
            	    }
            	    else {
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        throw mse;
            	    }


            	    pushFollow(FOLLOW_multiplicacao_in_adicao224);
            	    multiplicacao();

            	    state._fsp--;


            	    }
            	    break;

            	default :
            	    break loop8;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "adicao"



    // $ANTLR start "relacao"
    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:57:1: relacao : adicao ( ( '==' | '!=' | '<' | '<=' | '>=' | '>' ) adicao )* ;
    public final void relacao() throws RecognitionException {
        try {
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:57:8: ( adicao ( ( '==' | '!=' | '<' | '<=' | '>=' | '>' ) adicao )* )
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:58:2: adicao ( ( '==' | '!=' | '<' | '<=' | '>=' | '>' ) adicao )*
            {
            pushFollow(FOLLOW_adicao_in_relacao235);
            adicao();

            state._fsp--;


            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:58:9: ( ( '==' | '!=' | '<' | '<=' | '>=' | '>' ) adicao )*
            loop9:
            do {
                int alt9=2;
                int LA9_0 = input.LA(1);

                if ( (LA9_0==8||(LA9_0 >= 17 && LA9_0 <= 18)||(LA9_0 >= 20 && LA9_0 <= 22)) ) {
                    alt9=1;
                }


                switch (alt9) {
            	case 1 :
            	    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:58:10: ( '==' | '!=' | '<' | '<=' | '>=' | '>' ) adicao
            	    {
            	    if ( input.LA(1)==8||(input.LA(1) >= 17 && input.LA(1) <= 18)||(input.LA(1) >= 20 && input.LA(1) <= 22) ) {
            	        input.consume();
            	        state.errorRecovery=false;
            	    }
            	    else {
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        throw mse;
            	    }


            	    pushFollow(FOLLOW_adicao_in_relacao262);
            	    adicao();

            	    state._fsp--;


            	    }
            	    break;

            	default :
            	    break loop9;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "relacao"



    // $ANTLR start "expressao"
    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:61:1: expressao : relacao ( ( '&&' | '||' ) relacao )* ;
    public final void expressao() throws RecognitionException {
        try {
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:61:10: ( relacao ( ( '&&' | '||' ) relacao )* )
            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:62:2: relacao ( ( '&&' | '||' ) relacao )*
            {
            pushFollow(FOLLOW_relacao_in_expressao273);
            relacao();

            state._fsp--;


            // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:62:10: ( ( '&&' | '||' ) relacao )*
            loop10:
            do {
                int alt10=2;
                int LA10_0 = input.LA(1);

                if ( (LA10_0==9||LA10_0==30) ) {
                    alt10=1;
                }


                switch (alt10) {
            	case 1 :
            	    // /Users/lucas/Documents/workspace_xtext/PotigolANTLR/src/br/edu/ifrn/potigol/Potigol.g:62:11: ( '&&' | '||' ) relacao
            	    {
            	    if ( input.LA(1)==9||input.LA(1)==30 ) {
            	        input.consume();
            	        state.errorRecovery=false;
            	    }
            	    else {
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        throw mse;
            	    }


            	    pushFollow(FOLLOW_relacao_in_expressao284);
            	    relacao();

            	    state._fsp--;


            	    }
            	    break;

            	default :
            	    break loop10;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "expressao"

    // Delegated rules


 

    public static final BitSet FOLLOW_27_in_programa39 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_IDENTIFICADOR_in_programa41 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_programa43 = new BitSet(new long[]{0x0000000090800040L});
    public static final BitSet FOLLOW_constante_in_programa48 = new BitSet(new long[]{0x0000000090800040L});
    public static final BitSet FOLLOW_variavel_in_programa52 = new BitSet(new long[]{0x0000000090800040L});
    public static final BitSet FOLLOW_atribuicao_in_programa56 = new BitSet(new long[]{0x0000000090800040L});
    public static final BitSet FOLLOW_31_in_programa61 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_24_in_tipo70 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_23_in_constante79 = new BitSet(new long[]{0x0000000001000000L});
    public static final BitSet FOLLOW_tipo_in_constante81 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_CAIXAALTA_in_constante83 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_19_in_constante85 = new BitSet(new long[]{0x000000000400A4C0L});
    public static final BitSet FOLLOW_expressao_in_constante87 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_variavel96 = new BitSet(new long[]{0x0000000001000000L});
    public static final BitSet FOLLOW_tipo_in_variavel98 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_IDENTIFICADOR_in_variavel100 = new BitSet(new long[]{0x0000000000084002L});
    public static final BitSet FOLLOW_14_in_variavel103 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_IDENTIFICADOR_in_variavel105 = new BitSet(new long[]{0x0000000000084002L});
    public static final BitSet FOLLOW_19_in_variavel110 = new BitSet(new long[]{0x000000000400A4C0L});
    public static final BitSet FOLLOW_expressao_in_variavel112 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENTIFICADOR_in_atribuicao123 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_19_in_atribuicao125 = new BitSet(new long[]{0x000000000400A4C0L});
    public static final BitSet FOLLOW_expressao_in_atribuicao127 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENTIFICADOR_in_termo136 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_10_in_termo140 = new BitSet(new long[]{0x000000000400A4C0L});
    public static final BitSet FOLLOW_expressao_in_termo142 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_11_in_termo144 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_INTEIRO_in_termo148 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_26_in_negacao157 = new BitSet(new long[]{0x00000000040004C0L});
    public static final BitSet FOLLOW_termo_in_negacao160 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_negacao_in_unario178 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_unario_in_multiplicacao187 = new BitSet(new long[]{0x0000000002011002L});
    public static final BitSet FOLLOW_set_in_multiplicacao190 = new BitSet(new long[]{0x000000000400A4C0L});
    public static final BitSet FOLLOW_unario_in_multiplicacao202 = new BitSet(new long[]{0x0000000002011002L});
    public static final BitSet FOLLOW_multiplicacao_in_adicao213 = new BitSet(new long[]{0x000000000000A002L});
    public static final BitSet FOLLOW_set_in_adicao216 = new BitSet(new long[]{0x000000000400A4C0L});
    public static final BitSet FOLLOW_multiplicacao_in_adicao224 = new BitSet(new long[]{0x000000000000A002L});
    public static final BitSet FOLLOW_adicao_in_relacao235 = new BitSet(new long[]{0x0000000000760102L});
    public static final BitSet FOLLOW_set_in_relacao238 = new BitSet(new long[]{0x000000000400A4C0L});
    public static final BitSet FOLLOW_adicao_in_relacao262 = new BitSet(new long[]{0x0000000000760102L});
    public static final BitSet FOLLOW_relacao_in_expressao273 = new BitSet(new long[]{0x0000000040000202L});
    public static final BitSet FOLLOW_set_in_expressao276 = new BitSet(new long[]{0x000000000400A4C0L});
    public static final BitSet FOLLOW_relacao_in_expressao284 = new BitSet(new long[]{0x0000000040000202L});

}